package com.dp1.pucp.Seguridad.Controlador;

import com.dp1.pucp.Seguridad.DAO.*;
import com.dp1.pucp.Administracion.DAO.*;
import com.dp1.pucp.Seguridad.Vista.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.dp1.pucp.Modelo.Clases.Empleado;
import com.dp1.pucp.Modelo.Clases.Usuario;
import com.dp1.pucp.Modelo.Clases.Perfil;
import com.dp1.pucp.Util.Validaciones;
import java.util.ArrayList;

public class BuscarEmpleadoControlador {

    private RRHHDAO rrhhDAO;
    private UsuarioDAO usuarioDAO;
    private BuscarEmpleadoGUI buscarEmpleadoGUI;
    private UsuarioGUI usuarioGUI;
    private Usuario usuario;
    private ArrayList<Empleado> lstEmpleado;
    private ArrayList<Perfil> lstPerfil;
    private ArrayList<String> lstEstado;

    public BuscarEmpleadoControlador(UsuarioDAO dao, BuscarEmpleadoGUI v, UsuarioGUI q) {
        usuarioDAO = dao;
        buscarEmpleadoGUI = v;
        usuarioGUI = q;

        rrhhDAO = new RRHHDAO();
        buscarEmpleadoGUI.addBuscarListener(new listarEmpleados());
        buscarEmpleadoGUI.addCancelarListener(new cancelarEmpleados());
        buscarEmpleadoGUI.addSeleccionarListener(new seleccionarEmpleado());
        buscarEmpleadoGUI.addLimpiarListener(new limpiarListener());

    }

    public void listarResultados() {
        lstEmpleado = rrhhDAO.listarEmpleado();
        lstEmpleado = realizarFiltro(lstEmpleado);
        buscarEmpleadoGUI.llenaGrilla(lstEmpleado);
    }

    class listarEmpleados implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            listarResultados();
        }
    }
    
    public ArrayList<Empleado> realizarFiltro(ArrayList<Empleado> lista) {
        ArrayList<Empleado> listEmpleado = new ArrayList<>();
        ArrayList<Empleado> tempListEmpleado;

        tempListEmpleado = lista;
        for (int i = 0; i < tempListEmpleado.size(); i++) {
            if (tempListEmpleado.get(i).getEstado() == 1) {
                listEmpleado.add(tempListEmpleado.get(i));
            }
        }


        tempListEmpleado = listEmpleado;
        listEmpleado = new ArrayList<>();

        if (!buscarEmpleadoGUI.getCodigo().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListEmpleado.size(); i++) {
                if (tempListEmpleado.get(i).getCodigo().toUpperCase().contains(buscarEmpleadoGUI.getCodigo().toUpperCase())) {
                    listEmpleado.add(tempListEmpleado.get(i));
                }
            }
        } else {
            listEmpleado = tempListEmpleado;
        }

        tempListEmpleado = listEmpleado;
        listEmpleado = new ArrayList<>();


        if (!buscarEmpleadoGUI.getNombre().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListEmpleado.size(); i++) {
                if (tempListEmpleado.get(i).getNombre().toUpperCase().contains(buscarEmpleadoGUI.getNombre().toUpperCase())) {
                    listEmpleado.add(tempListEmpleado.get(i));
                }
            }
        } else {
            listEmpleado = tempListEmpleado;
        }

        tempListEmpleado = listEmpleado;
        listEmpleado = new ArrayList<>();

        if (!buscarEmpleadoGUI.getApPaterno().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListEmpleado.size(); i++) {
                if (tempListEmpleado.get(i).getApPaterno().toUpperCase().contains(buscarEmpleadoGUI.getApPaterno().toUpperCase())) {
                    listEmpleado.add(tempListEmpleado.get(i));
                }
            }
        } else {
            listEmpleado = tempListEmpleado;
        }

        return listEmpleado;
    }

    class seleccionarEmpleado implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = buscarEmpleadoGUI.getFilaSel();
            Empleado u = null;
            ArrayList<Empleado> totalemp = new ArrayList<>();
            for (int i = 0; i < lstEmpleado.size(); i++) {
                if (lstEmpleado.get(i).getEstado() == 1) {
                    totalemp.add(lstEmpleado.get(i));
                }
            }
            if (sel != -1) {
                u = totalemp.get(sel);
                usuarioGUI.setEmpleado(u);
                buscarEmpleadoGUI.dispose();
            } else {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar un Empleado");
            }


        }
    }

    class limpiarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            buscarEmpleadoGUI.LimpiarDatos();
        }
    }

    class cancelarEmpleados implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int salida;

            salida = Validaciones.solicitarConfirmacionSalida("buscar empleado");

            if (salida == 0) {
                buscarEmpleadoGUI.dispose();
            }
            return;
        }
    }
}
